#ifndef STX_CORE_TYPE_TRAITS_ADD_LVALUE_REFERENCE_HPP
#define STX_CORE_TYPE_TRAITS_ADD_LVALUE_REFERENCE_HPP

namespace stx {

template <class T> struct add_lvalue_reference                      { typedef T& type; };
template <class T> struct add_lvalue_reference<T&>                  { typedef T& type; };  // for compatibility reasons
template <>        struct add_lvalue_reference<void>                { typedef void type; };
template <>        struct add_lvalue_reference<const void>          { typedef const void type; };
template <>        struct add_lvalue_reference<volatile void>       { typedef volatile void type; };
template <>        struct add_lvalue_reference<const volatile void> { typedef const volatile void type; };
#ifdef STX_HAS_RVALUE_REFERENCES
template <class T> struct add_lvalue_reference<T&&>                 { typedef T& type; };
#endif

} // namespace stx

#endif // STX_CORE_TYPE_TRAITS_ADD_LVALUE_REFERENCE_HPP
